(function($, window, document) {
	// 定义构造函数
	function Paging(el, options) {
		this.el = el;
		this.options = {
			pageNo : options.initPageNo || 1, // 初始页码
			totalPages : options.totalPages || 1, // 总页数
			totalCount : options.totalCount || '', // 条目总数
			slideSpeed : options.slideSpeed || 0, // 缓动速度
			jump : options.jump || false, // 支持跳转
			callback : options.callback || function() {
			} // 回调函数
		};
		this.init();
	}
	// 给实例对象添加公共属性和方法
	Paging.prototype = {
		constructor : Paging,
		init : function() {
			this.createDom();
			this.bindEvents();
		},
		createDom : function() {
			var that = this, ulDom = '', jumpDom = '', content = '', liWidth = 60, // li的宽度
			totalPages = that.options.totalPages, // 总页数
			pagenum = that.options.pageNo,
			wrapLength = 0;
			totalPages > 5 ? wrapLength = 5 * liWidth : wrapLength = totalPages
					* liWidth;
			for (var i = 1; i <= that.options.totalPages; i++) {
				i != that.options.pageNo ? ulDom += '<li>' + i + '</li>'
						: ulDom += '<li class="sel-page">' + i + '</li>';
			}
			that.options.jump ? jumpDom = '<input type="text" placeholder="1" class="jump-text jumpText"><button type="button" class="jump-button jumpBtn" id="">跳转</button>'
					: jumpDom = '';
			content = '<button type="button" id="" class="turnPage first-page firstPage">首页</button>'
					+ '<button class="turnPage prePage" id="">上一页</button>'
					+ '<div class="pageWrap" style="width:'
					+ wrapLength
					+ 'px">'
					+ '<ul class="pageSelect" style="transition:all '
					+ that.options.slideSpeed
					+ 'ms">'
					+ ulDom
					+ '</ul></div>'
					+ '<button class="turnPage nextPage" id="">下一页</button>'
					+ '<button type="button" id="" class="last-page lastPage">尾页</button>'
					+ jumpDom
					+ '<p class="total-pages">共&nbsp;'
					+ that.options.totalPages
					+ '&nbsp;页</p>';
			that.el.html(content);
		},
		bindEvents : function() {
			var that = this, pageSelect = $('.pageSelect'), // ul
			lis = pageSelect.children(), // li的集合
			liWidth = lis[0].offsetWidth, // li的宽度
			totalPages = that.options.totalPages, // 总页数
			pageIndex = that.options.pageNo, // 当前选择的页码
			distance = 0, // ul移动距离
			prePage = $('.prePage'), nextPage = $('.nextPage'), firstPage = $('.firstPage'), lastPage = $('.lastPage'), jumpBtn = $('.jumpBtn'), jumpText = $('.jumpText');
 
			prePage.on('click', function() {
				pageIndex--;
				if (pageIndex < 1)
					pageIndex = 1;
				var pagetype = $(this).parents(".box").data("kind");
				handles(pageIndex,pagetype);
			})
 
			nextPage.on('click', function() {
				pageIndex++;
				if (pageIndex > lis.length)
					pageIndex = lis.length;
				var pagetype = $(this).parents(".box").data("kind");
				handles(pageIndex,pagetype);
			})
 
			firstPage.on('click', function() {
				pageIndex = 1;
				var pagetype = $(this).parents(".box").data("kind");
				handles(pageIndex,pagetype);
			})
 
			lastPage.on('click', function() {
				pageIndex = totalPages;
				var pagetype = $(this).parents(".box").data("kind");
				handles(pageIndex,pagetype);
			})
 
			jumpBtn.on('click', function() {
				var jumpNum = parseInt(jumpText.val().replace(/\D/g, ''));
				if (jumpNum && jumpNum >= 1 && jumpNum <= totalPages) {
					pageIndex = jumpNum;
					var pagetype = $(this).parents(".box").data("kind");
					handles(pageIndex,pagetype);
					jumpText.val(jumpNum);
				}
			})
 
			lis.on('click', function() {
				pageIndex = $(this).index() + 1;
				var pagetype = $(this).parents(".box").data("kind");
				handles(pageIndex,pagetype);
			})
 
			function handles(pageIndex,pagetype) {
				/*
				 * =========== 在需要分页的页面写对应的js代码 ================
				 */
				JumpToPage(pageIndex,pagetype);
				/*
				 * =========== 在需要分页的页面写对应的js代码 ================
				 */
				if(pagetype == "b1"){
					$('.box1 .pageSelect').children().removeClass('sel-page').eq(pageIndex - 1).addClass(
					'sel-page');
					pageSelect = $('.box1 .pageSelect');
				}else if(pagetype == "b2"){
					$('.box2 .pageSelect').children().removeClass('sel-page').eq(pageIndex - 1).addClass(
					'sel-page');
					pageSelect = $('.box2 .pageSelect');
				}else if(pagetype == "b3"){
					$('.box3 .pageSelect').children().removeClass('sel-page').eq(pageIndex - 1).addClass(
					'sel-page');
					pageSelect = $('.box3 .pageSelect');
				}
				
				if (totalPages <= 5) {
					that.options.callback(pageIndex);
					return false;
				}
				if (pageIndex >= 3 && pageIndex <= totalPages - 2)
					distance = (pageIndex - 3) * liWidth;
				if (pageIndex == 2 || pageIndex == 1)
					distance = 0;
				if (pageIndex > totalPages - 2)
					distance = (totalPages - 5) * liWidth;
 
				pageSelect
						.css('transform', 'translateX(' + (-distance) + 'px)');
				pageIndex == 1 ? firstPage.attr('disabled', true) : firstPage
						.attr('disabled', false);
				pageIndex == 1 ? prePage.attr('disabled', true) : prePage.attr(
						'disabled', false);
				pageIndex == totalPages ? lastPage.attr('disabled', true)
						: lastPage.attr('disabled', false);
				pageIndex == totalPages ? nextPage.attr('disabled', true)
						: nextPage.attr('disabled', false);
				that.options.callback(pageIndex);
			}
			;
		}
	}
	$.fn.paging = function(options) {
		return new Paging($(this), options);
	}
})(jQuery, window, document);